#ifndef __IBLOCKRENDERER__
#define __IBLOCKRENDERER__

#include "..\Schematics\Schematic.h"
#include "..\Schematics\Block.h"
#include "RendererBase.h"

/// <summary>
/// An interface to a block renderer.
/// </summary>
class IBlockRenderer
{
public:
	/// <summary>
	/// Called to render this block. Must be overridden by implementors of this interface.
	/// </summary>
	/// <param name="schematic">The schematic this block is a part of.</param>
	/// <param name="renderer">The renderer, which can render primitives.</param>
	/// <param name="block">The block being rendered.</param>
	/// <param name="position">The position of this block in the world.</param>
	virtual void Render(Schematic *schematic, RendererBase *renderer, const Block &block, const Point3i &position) = 0;

	/// <summary>
	/// Retrieve the data for this block that only comprises the
	/// data required to render its texture.
	/// </summary>
	/// <param name="data">The input data.</param>
	/// <returns>The output data.</returns>
	virtual int GetTypeData(const int &data) { return data; }
};

#else
class IBlockRenderer;
#endif